Python数据结构

🤔


字符串

字符串是字符的序列,可以使用单引号、双引号及三引号来指定字符串

1
2
3
4
5
6
name = 'etnly'   
name = "etnly"
# 两者工作机制完全相同
'''这是一个多行字符串
这是第二行
这位是第三行'''

在程序中使用的所有字符串都是str类下的对象,并且它也具有自己的方法,具体的方法清单可以查阅 help(str) 。

1
2
3
4
5
6
7
8
9
10
 # 返回字符串长度
name = 'etnly'
len(name)
# 遍历字符串
name = 'etnly'
for i in name:
print(i)
# 字符串切片
print(name[1:3])
# 输出 tn

列表

列表是一种用于保存一系列有序项目的集合,也就是说,你可以利用列表保存一串项目的序列。和字符串类似,在字符串中这些项目是字符,而列表中它可以是任何类型,列表中的值称为元素

  • 创建列表最简单的方式是使用 [] 方括号:
1
2
3
num = [1, 2, 3]   
name = ['张三', '李四']
other = [[1, 2, 3], 'a', 'b' 3.0]

字符串的值是不可变的,而列表的值是可变的。如:

1
2
num[1] = 3   
print(num)
  • 输出:
    [1, 3, 3]

列表对象也有自己的方法,具体可以查阅 help(list) 。

1
2
3
4
5
6
7
8
9
10
11
12
 # 列表遍历
num = [1, 2, 3]
for i in num:
print(i)
# 列表拼接
num2 = [2, 3, 4]
num3 = num + num2
# 列表切片
print(num3[1:3])
# 这里输出 [2, 3]
# 添加元素
num.append(4)

字典

字典类似于列表,但更加通用,在列表中下表必须是整数,而字典中,下标基本可以是任意类型。

字典包含键(下标)和值。每一个键都关联一个值,这种方式称为键值对,字典体现了键到值的映射,所以可以说每一个键映射到一个值。

  • 新建一个字典可以:

    d = {'a' : 1, 'b' : 2, 'c' : 3}
    d = dict() # 新建一个空字典

字典是通过散列表的方式实现的,意味着键必须是可散列的。
散列是一个函数,接收值并返回一个整数,字典使用这些被称为散列值的整数来保存和查找键值对。


元组

元组用于将多个对象保存到一起,其值可以是任何类型,并按照下标索引,元组和列表非常相似,其二者主要区别在于,元组是不可变的。元组通常用于保证某一语句或某一用户定义的函数可以安全地采用一组数值。

  • 元组语法上用逗号分隔一列值,可以用括号括起来:

    t = 'a', 'b', 'c', 1, 2
    t = ('a', 'b', 'c', 1, 2)

用括号括起来单独的值如 t = (‘a’) 并不是元组,如要新建元组可以使用内置函数tuple

t = tuple()

严格的来说函数只能返回一个值,但如果返回的是元组,就可以达到类似返回多个值的效果。

元组、列表和字典

列表和元组

zip函数,接收两个或多个序列,并返回一个元组列表,每个元组包含来自每个序列的一个元素。

1
2
3
a = 'abc'   
b = [0, 1, 2]
print(zip(a, b))
  • 结果返回 <zip object at 0x10d5e1b08>

这是一个zip对象,它知道如何遍历每个元素对,zip对象是一种迭代器,即用来迭代访问一个序列的对象

使用zip最常见的方法是在for循环中:

1
2
for i in zip(a, b):   
print(i)

  • 输出:('a', 0) ('b', 1) ('c', 2)

如果需要使用列表的操作,可以利用zip对象制作一个列表:
list(zip(a, b))

字典和元组

字典方法items可以返回一个元组序列,其中每个元组是一个键值对:

1
2
3
d = {0 : 'a', 1 : 'b', 2 : 'c'}   
t = d.items()
print(t)

  • 输出: dict_items([(0, 'a'), (1, 'b'), (2, ‘c’)])

反过来可以使用元组列表来初始化一个字典:

1
2
t = [(0, 'a'), (1, 'b'), (2, ‘c’)]   
d = dict(t)

  • 我们可以通过dict和items得到一个简洁的创建新字典的方法:

    d = dict(zip('abc', range(3)))


序列

列表、元组和字符串可以看作序列(Sequence)的某种表现形式,序列的主要功能是资格测试(也就是 in 与 not in 表达式)和索引操作,它们能够允许我们直接获取序列中的特定项目。


引用

当你创建了一个对象并将其分配给某个变量时,变量只会查阅某个对象,并且它也 不会代表对象本身。也就是说,变量名只是指向你计算机内存中存储了相应对象的那一部分。这叫作将名称绑定给那一个对象。

宇 wechat
扫描二维码,订阅微信公众号